Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in assign(cacheKey, frame, .rs.CachedDataEnv) : 
  attempt to use zero-length variable name
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in assign(cacheKey, frame, .rs.CachedDataEnv) : 
  attempt to use zero-length variable name
mxn10_plot <- ggplot(data = mxn10, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = mxn10_axis_set$chr, 
                     breaks = mxn10_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(mxn10_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife", 
       subtitle = "Size 10,000 Step 2,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn10_plot


mxn50_plot <- ggplot(data = mxn50, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = mxn50_axis_set$chr, 
                     breaks = mxn50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(mxn50_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_plot


### Regions of Interest ###
## Looking at Chromosomes with Fst of 0.25 or greater ##
mxn50_chr1_plot <- ggplot(data = filter(mxn50, chr == "NC_055957.1"), 
                          mapping = aes(x = pos_cum, 
                                        y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxn50_axis_set$chr, 
                     breaks = mxn50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_chr1_plot


mxn50_chr2_plot <- ggplot(data = filter(mxn50, chr == "NC_055958.1"), 
                          mapping = aes(x = pos_cum, 
                                        y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
  scale_x_continuous(label = mxn50_axis_set$chr, 
                     breaks = mxn50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_chr2_plot


mxn50_chr3_plot <- ggplot(data = filter(mxn50, chr == "NC_055959.1"), 
                          mapping = aes(x = pos_cum, 
                                        y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxn50_axis_set$chr, 
                     breaks = mxn50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_chr3_plot


mxn50_chr10_plot <- ggplot(data = filter(mxn50, chr == "NC_055966.1"), 
                           mapping = aes(x = pos_cum, 
                                         y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxn50_axis_set$chr, 
                     breaks = mxn50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_chr10_plot


mxn50_chr12_plot <- ggplot(data = filter(mxn50, chr == "NC_055968.1"), 
                           mapping = aes(x = pos_cum, 
                                          y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxn50_axis_set$chr, 
                     breaks = mxn50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_chr12_plot


### Chromosome 2 Spike Region ###

mxn50_spike_plot <- mxn50 %>%
  filter(chr == "NC_055958.1") %>%
  filter(midPos >= 16600000) %>%
  filter(midPos <= 17000000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#869ca8") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife Chromosome 2", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_spike_plot


### Chromosome 3 "spike" region ###
mxn50_chr3_spike_plot <- mxn50 %>%
  filter(chr == "NC_055959.1") %>%
  filter(midPos >= 24600000) %>%
  filter(midPos <= 24800000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#242b35") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "Southern vs Northern Anadromous Alewife Chromosome 3", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxn50_chr3_spike_plot

mxg10_plot <- ggplot(data = mxg10, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = mxg10_axis_set$chr, 
                     breaks = mxg10_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(mxg10_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 10,000 Step 2,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg10_plot


mxg50_plot <- ggplot(data = mxg50, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = mxg50_axis_set$chr, 
                     breaks = mxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(mxg50_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_plot


### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
mxg50_chr1_plot <- ggplot(data = filter(mxg50, chr == "NC_055957.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxg50_axis_set$chr, 
                     breaks = mxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_chr1_plot


mxg50_chr2_plot <- ggplot(data = filter(mxg50, chr == "NC_055958.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
  scale_x_continuous(label = mxg50_axis_set$chr, 
                     breaks = mxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_chr2_plot


mxg50_chr3_plot <- ggplot(data = filter(mxg50, chr == "NC_055959.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxg50_axis_set$chr, 
                     breaks = mxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_chr3_plot


mxg50_chr10_plot <- ggplot(data = filter(mxg50, chr == "NC_055966.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxg50_axis_set$chr, 
                     breaks = mxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_chr10_plot


mxg50_chr12_plot <- ggplot(data = filter(mxg50, chr == "NC_055968.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxg50_axis_set$chr, 
                     breaks = mxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_chr12_plot


### Chromosome 2 Spike Region ###

mxg50_spike_plot <- mxg50 %>%
  filter(chr == "NC_055958.1") %>%
  filter(midPos >= 16600000) %>%
  filter(midPos <= 17000000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#869ca8") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife Chromosome 2", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_spike_plot


### Chromosome 3 "spike" region ###
mxg50_chr3_spike_plot <- mxg50 %>%
  filter(chr == "NC_055959.1") %>%
  filter(midPos >= 24600000) %>%
  filter(midPos <= 24800000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#242b35") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "Southern vs Northern Anadromous Alewife Chromosome 3", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxg50_chr3_spike_plot

nxg10_plot <- ggplot(data = nxg10, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = nxg10_axis_set$chr, 
                     breaks = nxg10_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(nxg10_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 10,000 Step 2,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg10_plot


nxg50_plot <- ggplot(data = nxg50, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = nxg50_axis_set$chr, 
                     breaks = nxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(nxg50_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_plot


### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
nxg50_chr1_plot <- ggplot(data = filter(nxg50, chr == "NC_055957.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxg50_axis_set$chr, 
                     breaks = nxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_chr1_plot


nxg50_chr2_plot <- ggplot(data = filter(nxg50, chr == "NC_055958.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
  scale_x_continuous(label = nxg50_axis_set$chr, 
                     breaks = nxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_chr2_plot


nxg50_chr3_plot <- ggplot(data = filter(nxg50, chr == "NC_055959.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxg50_axis_set$chr, 
                     breaks = nxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_chr3_plot


nxg50_chr10_plot <- ggplot(data = filter(nxg50, chr == "NC_055966.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxg50_axis_set$chr, 
                     breaks = nxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_chr10_plot


nxg50_chr12_plot <- ggplot(data = filter(nxg50, chr == "NC_055968.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxg50_axis_set$chr, 
                     breaks = nxg50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_chr12_plot


### Chromosome 2 Spike Region ###

nxg50_spike_plot <- nxg50 %>%
  filter(chr == "NC_055958.1") %>%
  filter(midPos >= 16600000) %>%
  filter(midPos <= 17000000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#869ca8") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife Chromosome 2", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_spike_plot


### Chromosome 3 "spike" region ###
nxg50_chr3_spike_plot <- nxg50 %>%
  filter(chr == "NC_055959.1") %>%
  filter(midPos >= 24600000) %>%
  filter(midPos <= 24800000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#242b35") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "N. Atlantic vs. Great Lakes Landlocked Alewife Chromosome 3", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxg50_chr3_spike_plot

mxf10_plot <- ggplot(data = mxf10, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = mxf10_axis_set$chr, 
                     breaks = mxf10_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(mxf10_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 10,000 Step 2,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf10_plot


mxf50_plot <- ggplot(data = mxf50, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = mxf50_axis_set$chr, 
                     breaks = mxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(mxf50_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf50_plot


### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
mxf50_chr1_plot <- ggplot(data = filter(mxf50, chr == "NC_055957.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxf50_axis_set$chr, 
                     breaks = mxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf50_chr1_plot


mxf50_chr2_plot <- ggplot(data = filter(mxf50, chr == "NC_055958.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
  scale_x_continuous(label = mxf50_axis_set$chr, 
                     breaks = mxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf50_chr2_plot


mxf50_chr3_plot <- ggplot(data = filter(mxf50, chr == "NC_055959.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxf50_axis_set$chr, 
                     breaks = mxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf50_chr3_plot


mxf50_chr10_plot <- ggplot(data = filter(mxf50, chr == "NC_055966.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxf50_axis_set$chr, 
                     breaks = mxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf50_chr10_plot


mxf50_chr12_plot <- ggplot(data = filter(mxf50, chr == "NC_055968.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = mxf50_axis_set$chr, 
                     breaks = mxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf50_chr12_plot


### Chromosome 2 Spike Region ###

mxf50_spike_plot <- mxf50 %>%
  filter(chr == "NC_055958.1") %>%
  filter(midPos >= 16600000) %>%
  filter(midPos <= 17000000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#869ca8") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife Chromosome 2", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
mxf50_spike_plot

nxf10_plot <- ggplot(data = nxf10, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = nxf10_axis_set$chr, 
                     breaks = nxf10_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(nxf10_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 10,000 Step 2,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf10_plot


nxf50_plot <- ggplot(data = nxf50, 
                     mapping = aes(x = pos_cum, 
                                   y = Fst, 
                                   color = as_factor(chr))) +
  geom_point(alpha = 0.75, size = 0.5) +
  scale_x_continuous(label = nxf50_axis_set$chr, 
                     breaks = nxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_color_manual(values = rep(c("#242b35", "#869ca8"), 
                                  unique(length(nxf50_axis_set$chr)))) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf50_plot


### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
nxf50_chr1_plot <- ggplot(data = filter(nxf50, chr == "NC_055957.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxf50_axis_set$chr, 
                     breaks = nxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf50_chr1_plot


nxf50_chr2_plot <- ggplot(data = filter(nxf50, chr == "NC_055958.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
  scale_x_continuous(label = nxf50_axis_set$chr, 
                     breaks = nxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf50_chr2_plot


nxf50_chr3_plot <- ggplot(data = filter(nxf50, chr == "NC_055959.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxf50_axis_set$chr, 
                     breaks = nxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf50_chr3_plot


nxf50_chr10_plot <- ggplot(data = filter(nxf50, chr == "NC_055966.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxf50_axis_set$chr, 
                     breaks = nxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf50_chr10_plot


nxf50_chr12_plot <- ggplot(data = filter(nxf50, chr == "NC_055968.1"), 
                     mapping = aes(x = pos_cum, 
                                   y = Fst)) +
  geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
  scale_x_continuous(label = nxf50_axis_set$chr, 
                     breaks = nxf50_axis_set$center) +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  labs(x = NULL, 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf50_chr12_plot


### Chromosome 2 Spike Region ###

nxf50_spike_plot <- nxf50 %>%
  filter(chr == "NC_055958.1") %>%
  filter(midPos >= 16600000) %>%
  filter(midPos <= 17000000) %>%
  ggplot(.,
         mapping = aes(x = midPos, 
                       y = Fst, 
                       size = Nsites)) +
  geom_point(alpha = 0.75, color = "#869ca8") +
  scale_y_continuous(expand = c(0,0), 
                     limits = c(-0.05, 1)) +
  scale_size_continuous(range = c(0.5, 3)) +
  labs(x = "Position", 
       y = "Fst", 
       title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife Chromosome 2", 
       subtitle = "Size 50,000 Step 10,000") +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        axis.title.y = element_markdown(),
        axis.text.x = element_text(angle = 90,
                                  size = 8,
                                  vjust = 0.5))
nxf50_spike_plot

### Using ggsave to save the manhattan plots, or as I will now refer to it: ###
# Saving Private Plots (Ryan lol) ##
ggsave("figures/sliding-windows-fst/MIDA-x-NATLA-sz50-chrom2-spike.png", 
       plot = mxn50_spike_plot, 
       width = 10, 
       height = 4)
LS0tCnRpdGxlOiAiU2xpZGluZyBXaW5kb3dzIEFuYWx5c2lzIgpzdWJ0aXRsZTogIkFsZXdpZmUgUG9wdWxhdGlvbnMgb2YgSW50ZXJlc3QgU3Vic2V0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG8gPSBGQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2d0ZXh0KQpgYGAKCmBgYHtyIGRhdGFfb3JnLCBlY2hvID0gRkFMU0V9CmNvbHMgPC0gYygicmVnaW9uIiwgCiAgICAgICAgICAiY2hyIiwgCiAgICAgICAgICAibWlkUG9zIiwgCiAgICAgICAgICAiTnNpdGVzIiwgCiAgICAgICAgICAiRnN0IikKCgojIyMgTWlkLUF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm14ZjEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tRklOTC0tc2l6ZS0xMDAwMC0tc3RlcC0yMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbXhmMTBfY3VtIDwtIG14ZjEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpteGYxMCA8LSBteGYxMCAlPiUKICBpbm5lcl9qb2luKG14ZjEwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbXhmMTBfYXhpc19zZXQgPC0gbXhmMTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIFNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwICMjCm14ZjUwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tRklOTC0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm14ZjUwX2N1bSA8LSBteGY1MCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbXhmNTAgPC0gbXhmNTAgJT4lCiAgaW5uZXJfam9pbihteGY1MF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm14ZjUwX2F4aXNfc2V0IDwtIG14ZjUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgoKIyMjIE5vcnRoZXJuIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm54ZjEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTkFUTEEtLXgtLUZJTkwtLXNpemUtMTAwMDAtLXN0ZXAtMjAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm54ZjEwX2N1bSA8LSBueGYxMCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbnhmMTAgPC0gbnhmMTAgJT4lCiAgaW5uZXJfam9pbihueGYxMF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm54ZjEwX2F4aXNfc2V0IDwtIG54ZjEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgojIyBTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCAjIwpueGY1MCA8LSByZWFkX2RlbGltKCJkYXRhL3N1bW1hcml6ZWQvc2xpZGluZ193aW5kb3dfZnN0L05BVExBLS14LS1GSU5MLS1zaXplLTUwMDAwLS1zdGVwLTEwMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbnhmNTBfY3VtIDwtIG54ZjUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpueGY1MCA8LSBueGY1MCAlPiUKICBpbm5lcl9qb2luKG54ZjUwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbnhmNTBfYXhpc19zZXQgPC0gbnhmNTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCgojIyMgTm9ydGhlcm4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSAjIyMKIyMgU2l6ZSAxMCwwMDAgU3RlcCAyLDAwMCAjIwpueGcxMCA8LSByZWFkX2RlbGltKCJkYXRhL3N1bW1hcml6ZWQvc2xpZGluZ193aW5kb3dfZnN0L05BVExBLS14LS1HUlRMLS1zaXplLTEwMDAwLS1zdGVwLTIwMDAudHN2IiwgCiAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDIsIAogICAgICAgICAgICAgICAgICAgIGRlbGltID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gY29scywKICAgICAgICAgICAgICAgICAgICBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpueGcxMF9jdW0gPC0gbnhnMTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKCm54ZzEwIDwtIG54ZzEwICU+JQogIGlubmVyX2pvaW4obnhnMTBfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpueGcxMF9heGlzX3NldCA8LSBueGcxMCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShjZW50ZXIgPSBtZWFuKHBvc19jdW0pKQoKIyMgU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAgIyMKbnhnNTAgPC0gcmVhZF9kZWxpbSgiZGF0YS9zdW1tYXJpemVkL3NsaWRpbmdfd2luZG93X2ZzdC9OQVRMQS0teC0tR1JUTC0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm54ZzUwX2N1bSA8LSBueGc1MCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbnhnNTAgPC0gbnhnNTAgJT4lCiAgaW5uZXJfam9pbihueGc1MF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm54ZzUwX2F4aXNfc2V0IDwtIG54ZzUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgoKIyMjIE1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIEFsZXdpZmUgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm14ZzEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tR1JUTC0tc2l6ZS0xMDAwMC0tc3RlcC0yMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbXhnMTBfY3VtIDwtIG14ZzEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpteGcxMCA8LSBteGcxMCAlPiUKICBpbm5lcl9qb2luKG14ZzEwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbXhnMTBfYXhpc19zZXQgPC0gbXhnMTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIFNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwICMjCm14ZzUwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tR1JUTC0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm14ZzUwX2N1bSA8LSBteGc1MCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbXhnNTAgPC0gbXhnNTAgJT4lCiAgaW5uZXJfam9pbihteGc1MF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm14ZzUwX2F4aXNfc2V0IDwtIG14ZzUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgoKIyMjIE1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIEFsZXdpZmUgdnMgTm9ydGhlcm4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm14bjEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tTkFUTEEtLXNpemUtMTAwMDAtLXN0ZXAtMjAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm14bjEwX2N1bSA8LSBteG4xMCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbXhuMTAgPC0gbXhuMTAgJT4lCiAgaW5uZXJfam9pbihteG4xMF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm14bjEwX2F4aXNfc2V0IDwtIG14bjEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgojIyBTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCAjIwpteG41MCA8LSByZWFkX2RlbGltKCJkYXRhL3N1bW1hcml6ZWQvc2xpZGluZ193aW5kb3dfZnN0L01JREEtLXgtLU5BVExBLS1zaXplLTUwMDAwLS1zdGVwLTEwMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbXhuNTBfY3VtIDwtIG14bjUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpteG41MCA8LSBteG41MCAlPiUKICBpbm5lcl9qb2luKG14bjUwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbXhuNTBfYXhpc19zZXQgPC0gbXhuNTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCmBgYAoKCmBgYHtyIE1JREFfeF9OQVRMQV9wbG90c30KbXhuMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG14bjEwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14bjEwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14bjEwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChteG4xMF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgdnMgTi4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDEwLDAwMCBTdGVwIDIsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14bjEwX3Bsb3QKCm14bjUwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBteG41MCwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteG41MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteG41MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgobXhuNTBfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfcGxvdAoKIyMjIFJlZ2lvbnMgb2YgSW50ZXJlc3QgIyMjCiMjIExvb2tpbmcgYXQgQ2hyb21vc29tZXMgd2l0aCBGc3Qgb2YgMC4yNSBvciBncmVhdGVyICMjCm14bjUwX2NocjFfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteG41MCwgY2hyID09ICJOQ18wNTU5NTcuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhuNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhuNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfY2hyMV9wbG90CgpteG41MF9jaHIyX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhuNTAsIGNociA9PSAiTkNfMDU1OTU4LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14bjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14bjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyB2cyBOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14bjUwX2NocjJfcGxvdAoKbXhuNTBfY2hyM19wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14bjUwLCBjaHIgPT0gIk5DXzA1NTk1OS4xIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteG41MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteG41MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgdnMgTi4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteG41MF9jaHIzX3Bsb3QKCm14bjUwX2NocjEwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhuNTAsIGNociA9PSAiTkNfMDU1OTY2LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhuNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhuNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfY2hyMTBfcGxvdAoKbXhuNTBfY2hyMTJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteG41MCwgY2hyID09ICJOQ18wNTU5NjguMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhuNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhuNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfY2hyMTJfcGxvdAoKIyMjIENocm9tb3NvbWUgMiBTcGlrZSBSZWdpb24gIyMjCgpteG41MF9zcGlrZV9wbG90IDwtIG14bjUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OC4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAxNjYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAxNzAwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgdnMgTi4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIENocm9tb3NvbWUgMiIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfc3Bpa2VfcGxvdAoKIyMjIENocm9tb3NvbWUgMyAic3Bpa2UiIHJlZ2lvbiAjIyMKbXhuNTBfY2hyM19zcGlrZV9wbG90IDwtIG14bjUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OS4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAyNDYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAyNDgwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJTb3V0aGVybiB2cyBOb3J0aGVybiBBbmFkcm9tb3VzIEFsZXdpZmUgQ2hyb21vc29tZSAzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteG41MF9jaHIzX3NwaWtlX3Bsb3QKYGBgCgpgYGB7ciBNSURBX3hfR1JUTF9wbG90c30KbXhnMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG14ZzEwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzEwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzEwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChteGcxMF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgMTAsMDAwIFN0ZXAgMiwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnMTBfcGxvdAoKbXhnNTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG14ZzUwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChteGc1MF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZzUwX3Bsb3QKCiMjIyBSZWdpb25zIG9mIEludGVyZXN0ICMjIwojIyBMb29raW5nIGF0IHRoZSBzYW1lIGNocm9tb3NvbWVzIGZvciBNSURBIHZzIE5BVExBICMjCm14ZzUwX2NocjFfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGc1MCwgY2hyID09ICJOQ18wNTU5NTcuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGc1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGc1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZzUwX2NocjFfcGxvdAoKbXhnNTBfY2hyMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZzUwLCBjaHIgPT0gIk5DXzA1NTk1OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnNTBfY2hyMl9wbG90CgpteGc1MF9jaHIzX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhnNTAsIGNociA9PSAiTkNfMDU1OTU5LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGc1MF9jaHIzX3Bsb3QKCm14ZzUwX2NocjEwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhnNTAsIGNociA9PSAiTkNfMDU1OTY2LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGc1MF9jaHIxMF9wbG90CgpteGc1MF9jaHIxMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZzUwLCBjaHIgPT0gIk5DXzA1NTk2OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnNTBfY2hyMTJfcGxvdAoKIyMjIENocm9tb3NvbWUgMiBTcGlrZSBSZWdpb24gIyMjCgpteGc1MF9zcGlrZV9wbG90IDwtIG14ZzUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OC4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAxNjYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAxNzAwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUgQ2hyb21vc29tZSAyIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGc1MF9zcGlrZV9wbG90CgojIyMgQ2hyb21vc29tZSAzICJzcGlrZSIgcmVnaW9uICMjIwpteGc1MF9jaHIzX3NwaWtlX3Bsb3QgPC0gbXhnNTAgJT4lCiAgZmlsdGVyKGNociA9PSAiTkNfMDU1OTU5LjEiKSAlPiUKICBmaWx0ZXIobWlkUG9zID49IDI0NjAwMDAwKSAlPiUKICBmaWx0ZXIobWlkUG9zIDw9IDI0ODAwMDAwKSAlPiUKICBnZ3Bsb3QoLiwKICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gbWlkUG9zLCAKICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gTnNpdGVzKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMC41LCAzKSkgKwogIGxhYnMoeCA9ICJQb3NpdGlvbiIsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIlNvdXRoZXJuIHZzIE5vcnRoZXJuIEFuYWRyb21vdXMgQWxld2lmZSBDaHJvbW9zb21lIDMiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZzUwX2NocjNfc3Bpa2VfcGxvdApgYGAKCmBgYHtyIE5BVExBX3hfR1JUTF9wbG90c30KbnhnMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG54ZzEwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzEwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzEwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChueGcxMF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSAxMCwwMDAgU3RlcCAyLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGcxMF9wbG90CgpueGc1MF9wbG90IDwtIGdncGxvdChkYXRhID0gbnhnNTAsIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKG54ZzUwX2F4aXNfc2V0JGNocikpKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9wbG90CgojIyMgUmVnaW9ucyBvZiBJbnRlcmVzdCAjIyMKIyMgTG9va2luZyBhdCB0aGUgc2FtZSBjaHJvbW9zb21lcyBmb3IgTUlEQSB2cyBOQVRMQSAjIwpueGc1MF9jaHIxX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobnhnNTAsIGNociA9PSAiTkNfMDU1OTU3LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZzUwX2NocjFfcGxvdAoKbnhnNTBfY2hyMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZzUwLCBjaHIgPT0gIk5DXzA1NTk1OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9jaHIyX3Bsb3QKCm54ZzUwX2NocjNfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihueGc1MCwgY2hyID09ICJOQ18wNTU5NTkuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGc1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGc1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhnNTBfY2hyM19wbG90CgpueGc1MF9jaHIxMF9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZzUwLCBjaHIgPT0gIk5DXzA1NTk2Ni4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9jaHIxMF9wbG90CgpueGc1MF9jaHIxMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZzUwLCBjaHIgPT0gIk5DXzA1NTk2OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9jaHIxMl9wbG90CgojIyMgQ2hyb21vc29tZSAyIFNwaWtlIFJlZ2lvbiAjIyMKCm54ZzUwX3NwaWtlX3Bsb3QgPC0gbnhnNTAgJT4lCiAgZmlsdGVyKGNociA9PSAiTkNfMDU1OTU4LjEiKSAlPiUKICBmaWx0ZXIobWlkUG9zID49IDE2NjAwMDAwKSAlPiUKICBmaWx0ZXIobWlkUG9zIDw9IDE3MDAwMDAwKSAlPiUKICBnZ3Bsb3QoLiwKICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gbWlkUG9zLCAKICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gTnNpdGVzKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMC41LCAzKSkgKwogIGxhYnMoeCA9ICJQb3NpdGlvbiIsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIENocm9tb3NvbWUgMiIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhnNTBfc3Bpa2VfcGxvdAoKIyMjIENocm9tb3NvbWUgMyAic3Bpa2UiIHJlZ2lvbiAjIyMKbnhnNTBfY2hyM19zcGlrZV9wbG90IDwtIG54ZzUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OS4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAyNDYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAyNDgwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyB2cy4gR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIENocm9tb3NvbWUgMyIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhnNTBfY2hyM19zcGlrZV9wbG90CmBgYAoKYGBge3IgTUlEQV94X0ZJTkxfcGxvdHN9Cm14ZjEwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBteGYxMCwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGYxMF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGYxMF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgobXhmMTBfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSAxMCwwMDAgU3RlcCAyLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGYxMF9wbG90CgpteGY1MF9wbG90IDwtIGdncGxvdChkYXRhID0gbXhmNTAsIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhmNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhmNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKG14ZjUwX2F4aXNfc2V0JGNocikpKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZjUwX3Bsb3QKCiMjIyBSZWdpb25zIG9mIEludGVyZXN0ICMjIwojIyBMb29raW5nIGF0IHRoZSBzYW1lIGNocm9tb3NvbWVzIGZvciBNSURBIHZzIE5BVExBICMjCm14ZjUwX2NocjFfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGY1MCwgY2hyID09ICJOQ18wNTU5NTcuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGY1MF9jaHIxX3Bsb3QKCm14ZjUwX2NocjJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGY1MCwgY2hyID09ICJOQ18wNTU5NTguMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGY1MF9jaHIyX3Bsb3QKCm14ZjUwX2NocjNfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGY1MCwgY2hyID09ICJOQ18wNTU5NTkuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGY1MF9jaHIzX3Bsb3QKCm14ZjUwX2NocjEwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhmNTAsIGNociA9PSAiTkNfMDU1OTY2LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhmNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhmNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhmNTBfY2hyMTBfcGxvdAoKbXhmNTBfY2hyMTJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGY1MCwgY2hyID09ICJOQ18wNTU5NjguMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGY1MF9jaHIxMl9wbG90CgojIyMgQ2hyb21vc29tZSAyIFNwaWtlIFJlZ2lvbiAjIyMKCm14ZjUwX3NwaWtlX3Bsb3QgPC0gbXhmNTAgJT4lCiAgZmlsdGVyKGNociA9PSAiTkNfMDU1OTU4LjEiKSAlPiUKICBmaWx0ZXIobWlkUG9zID49IDE2NjAwMDAwKSAlPiUKICBmaWx0ZXIobWlkUG9zIDw9IDE3MDAwMDAwKSAlPiUKICBnZ3Bsb3QoLiwKICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gbWlkUG9zLCAKICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gTnNpdGVzKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMC41LCAzKSkgKwogIGxhYnMoeCA9ICJQb3NpdGlvbiIsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUgQ2hyb21vc29tZSAyIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGY1MF9zcGlrZV9wbG90CmBgYAoKYGBge3IgTkFUTEFfeF9GSU5MX3Bsb3RzfQpueGYxMF9wbG90IDwtIGdncGxvdChkYXRhID0gbnhmMTAsIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhmMTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhmMTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKG54ZjEwX2F4aXNfc2V0JGNocikpKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSAxMCwwMDAgU3RlcCAyLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGYxMF9wbG90CgpueGY1MF9wbG90IDwtIGdncGxvdChkYXRhID0gbnhmNTAsIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhmNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhmNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKG54ZjUwX2F4aXNfc2V0JGNocikpKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhmNTBfcGxvdAoKIyMjIFJlZ2lvbnMgb2YgSW50ZXJlc3QgIyMjCiMjIExvb2tpbmcgYXQgdGhlIHNhbWUgY2hyb21vc29tZXMgZm9yIE1JREEgdnMgTkFUTEEgIyMKbnhmNTBfY2hyMV9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZjUwLCBjaHIgPT0gIk5DXzA1NTk1Ny4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhmNTBfY2hyMV9wbG90CgpueGY1MF9jaHIyX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobnhmNTAsIGNociA9PSAiTkNfMDU1OTU4LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiM4NjljYTgiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhmNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhmNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGY1MF9jaHIyX3Bsb3QKCm54ZjUwX2NocjNfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihueGY1MCwgY2hyID09ICJOQ18wNTU5NTkuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZjUwX2NocjNfcGxvdAoKbnhmNTBfY2hyMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihueGY1MCwgY2hyID09ICJOQ18wNTU5NjYuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZjUwX2NocjEwX3Bsb3QKCm54ZjUwX2NocjEyX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobnhmNTAsIGNociA9PSAiTkNfMDU1OTY4LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhmNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhmNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGY1MF9jaHIxMl9wbG90CgojIyMgQ2hyb21vc29tZSAyIFNwaWtlIFJlZ2lvbiAjIyMKCm54ZjUwX3NwaWtlX3Bsb3QgPC0gbnhmNTAgJT4lCiAgZmlsdGVyKGNociA9PSAiTkNfMDU1OTU4LjEiKSAlPiUKICBmaWx0ZXIobWlkUG9zID49IDE2NjAwMDAwKSAlPiUKICBmaWx0ZXIobWlkUG9zIDw9IDE3MDAwMDAwKSAlPiUKICBnZ3Bsb3QoLiwKICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gbWlkUG9zLCAKICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gTnNpdGVzKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMC41LCAzKSkgKwogIGxhYnMoeCA9ICJQb3NpdGlvbiIsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSBDaHJvbW9zb21lIDIiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZjUwX3NwaWtlX3Bsb3QKYGBgCgoKYGBge3Igc2F2aW5nX3Bsb3RzfQojIyMgVXNpbmcgZ2dzYXZlIHRvIHNhdmUgdGhlIG1hbmhhdHRhbiBwbG90cywgb3IgYXMgSSB3aWxsIG5vdyByZWZlciB0byBpdDogIyMjCiMgU2F2aW5nIFByaXZhdGUgUGxvdHMgKFJ5YW4gbG9sKSAjIwpnZ3NhdmUoImZpZ3VyZXMvc2xpZGluZy13aW5kb3dzLWZzdC9NSURBLXgtTkFUTEEtc3o1MC1jaHJvbTItc3Bpa2UucG5nIiwgCiAgICAgICBwbG90ID0gbXhuNTBfc3Bpa2VfcGxvdCwgCiAgICAgICB3aWR0aCA9IDEwLCAKICAgICAgIGhlaWdodCA9IDQpCmBgYAoK